package com.yupi.project.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

/**
 * 流量控制配置类
 *
 * @author yupi
 */
@Configuration
@ConfigurationProperties(prefix = "yuapi.rate-limiter")
@Data
public class RateLimiterConfig {

    /**
     * 是否启用流量控制
     */
    private boolean enabled = true;

    /**
     * 默认令牌桶容量
     */
    private int defaultMaxTokens = 100;

    /**
     * 默认令牌生成速率（每秒）
     */
    private double defaultTokensPerSecond = 10.0;

    /**
     * 获取令牌的默认超时时间（毫秒）
     */
    private long defaultTimeout = 1000;

    /**
     * 接口特定的流量控制配置
     * key: 接口ID
     * value: 接口配置
     */
    @org.springframework.boot.context.properties.NestedConfigurationProperty
    private Map<Long, InterfaceRateLimit> interfaceLimits = new HashMap<>();

    /**
     * 获取接口的流量控制配置
     *
     * @param interfaceId 接口ID
     * @return 接口的流量控制配置，如果没有特定配置则返回默认配置
     */
    public InterfaceRateLimit getInterfaceRateLimit(Long interfaceId) {
        return interfaceLimits.getOrDefault(interfaceId, new InterfaceRateLimit());
    }

    /**
     * 接口流量控制配置
     */
    @Data
    public class InterfaceRateLimit {
        /**
         * 令牌桶容量
         */
        private int maxTokens = defaultMaxTokens;

        /**
         * 令牌生成速率（每秒）
         */
        private double tokensPerSecond = defaultTokensPerSecond;

        /**
         * 获取令牌的超时时间（毫秒）
         */
        private long timeout = defaultTimeout;
    }
}